package org.bopis.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.bopis.domain.UserContainer;
import org.bopis.services.db.DAOUsuario;
import org.bopis.utilidades.Utilidades;

import com.boole.model.Usuario;

public class PerfilUsuarioForm extends ActionForm{

private static final long serialVersionUID = 1L;
	
	private String screenName;
	private String nombre;
	private String apellido1;
	private String apellido2;
	private String empresa;
	private String contacto;
	private String telefono;
	private String email;
	
	public String getScreenName() {
		return screenName;
	}

	public void setScreenName(String screenName) {
		this.screenName = screenName;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido1() {
		return apellido1;
	}

	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

	public String getApellido2() {
		return apellido2;
	}

	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getContacto() {
		return contacto;
	}

	public void setContacto(String contacto) {
		this.contacto = contacto;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * Validaciones del fomulario
  	 */
  	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) 
  	{
    	ActionErrors errors = new ActionErrors();
    	Usuario usuario = ((UserContainer) request.getSession().getAttribute("userContainer")).getUsuario();
    	String screenNameSession = usuario.getScreenname();
    	String emailSession = usuario.getEmail();
    	Usuario usuarioAux = null;
    	
    	//el screenname es obligatorio y debe de ser unico
    	if(Utilidades.isVacia(screenName)){
    		errors.add("screenName", new ActionMessage("registro.usuario.screenname.required"));
    	}else{
    		if((usuarioAux = DAOUsuario.getUsuarioByScreenName(screenName)) != null){
    			if(!usuarioAux.getScreenname().equals(screenNameSession))    			
    				errors.add("screenName", new ActionMessage("registro.usuario.screenname.unico"));
    		}    		
    	}
    	
    	//el nombre es obligatorio
    	if(Utilidades.isVacia(nombre)){
    		errors.add("nombre", new ActionMessage("registro.usuario.nombre.required"));
    	}
    	
    	//el primer apellido es obligatorio
    	if(Utilidades.isVacia(apellido1)){
    		errors.add("apellido1", new ActionMessage("registro.usuario.apellido1.required"));
    	}
    	
    	//el segundo apellido es obligatorio
    	if(Utilidades.isVacia(apellido2)){
    		errors.add("apellido2", new ActionMessage("registro.usuario.apellido2.required"));
    	}
    	
    	//el telefono debe de tener un formato valido
    	if(!Utilidades.isVacia(telefono)){    		
    		if(!Utilidades.isTelefono(telefono)){
        		errors.add("telefono", new ActionMessage("registro.usuario.telefono.formato"));
        	}    		
    	}
    	
    	
    	//el email debe de tener un formato valido y debe de ser unico
    	if(!Utilidades.isVacia(email)){
    		
    		if(!Utilidades.isEmail(email)){
        		errors.add("email", new ActionMessage("registro.usuario.email.formato"));
        	}else{
        		if((usuarioAux = DAOUsuario.getUsuarioByEmail(email)) != null){
        			if(!usuarioAux.getEmail().equals(emailSession))
        				errors.add("email", new ActionMessage("registro.usuario.email.unico"));
        		}
        	}   		
    	}    	
    	   	
    	    	
    	return errors;
  	}
	
  	/**
   	 * Resetea todas las propiedades a sus valores por defecto.
   	 */
  	public void reset(ActionMapping mapping, HttpServletRequest request) 
  	{
  		this.screenName = null;
  		this.nombre = null;
  		this.apellido1 = null;
  		this.apellido2 = null;
  		this.empresa = null;
  		this.contacto = null;
  		this.telefono = null;
  		this.email = null;
  	}
	
}
